<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

</body>
<script>
  "use strict";

    // 如何进入严格模式?
    // 在作用域的最前面 添加关键词  "use strict";  
    // 全局作用域  script标签的最前面
    // 函数作用域  函数的最前面

    // var a = 10;
    //     b = 20;

    // console.log(a,b);

    // function fn(){
    //     "use strict"; 

    //     var a = 10;
    //     b = 20;
    //     console.log(a,b);
    // }
    // fn()

    // 1.  严格模式中,声明变量需要使用关键词var, 不经过var直接声明变量 会报错
    // var a = 10;
    //     b = 20;

    // console.log(a,b);


    // 2. 严格模式中  创建eval()作用域    eval()中的声明的变量是局部的
    // eval("var a = 2; console.log('inside:',a)");
    // console.log("outside",a);

    // 3. 严格模式中 禁止this指向window(不准确)   => undefined
    // 严格模式中,要求函数在调用过程要有依存的对象 有=>属于谁就指向谁   没有=>undefined(默认)

    // function fn(){
    //     console.log(this);
    // }
    // fn();  // this -> undefined
    // window.fn(); // this->window

    //  4.严格模式下   禁止删除变量(window的固有属性 => 官方不允许删除)

    // var a = 1;   // window.a
    // var b = 2;   // window.b

    // delete a;  //window.a
    // delete b;  //window.b

    // console.log(Object.getOwnPropertyDescriptor(window,"a"));

    // 5. 严格模式中 不允许使用重复的参数名称
    // function fn(a,b,b){
    //     // var a = 1;
    //     // var b = 2;
    //     // var b = 3;

    //     return a + b;
    // }
    // var result = fn(1,2,3);
    // console.log(result);







</script>

</html>